home *** CD-ROM | disk | FTP | other *** search
/ Merciful 1 / Merciful - Disc 1.iso / software / a / asm_one / asm-onev1.25d.dms / in.adf / Replays / PPReplay.s < prev    next >
Encoding:
Text File  |  1993-03-08  |  18.3 KB  |  719 lines

  1. *********************************************************************
  2. *                                                                   *
  3. *                 ­­­ Enlightment greetingspart ­­­                 *
  4. *                                                                   *
  5. * By: Azatoth of Phenomena.              Last change: 19-11-91 *
  6. *                                                                   *
  7. *********************************************************************
  8.  
  9. ******************** Defines Structures n Macros ********************
  10.  
  11. ScrDepth    EQU    1        Vector screen defines
  12. ScrHeight    EQU    256
  13. ScrBPR        EQU    40
  14. ScrBPB        EQU    ScrBPR*ScrHeight
  15. ScrBytes    EQU    ScrDepth*ScrBPB
  16.  
  17.         include Include:StdMacros.s
  18.  
  19. ******************************** Main *******************************
  20.  
  21. Start        lea    $dff000,a6        Init
  22.         mac    SystemOff
  23.         icpr    ScrAdr,ScrBplPtrs,ScrDepth,ScrBPB
  24.         move.l    #CprList,$080(a6)
  25.         move    #$83c0,$096(a6)
  26.         move    #$c000,$09a(a6)
  27.  
  28.         lea    pp_Data(pc),a0
  29.         bsr    pp_Init
  30.  
  31. .PlayLoop    lea    pp_Data(pc),a0
  32.         wline    $90,d1
  33.         move    #$fff,$180(a6)
  34.         bsr    pp_Music
  35.         move    #$000,$180(a6)
  36.         btst    #6,$bfe001
  37.         bne.s    .PlayLoop
  38.  
  39.         bsr    pp_End
  40.  
  41.         mac    SystemOn        Clean and close
  42.         moveq    #0,d0
  43.         rts
  44.  
  45. *********************************************************************
  46. ********************* Program specific routines *********************
  47.  
  48. ********************** Variables and Data ***************************
  49.  
  50. CprList        dc.w    $0102,$0000
  51.         dc.w    $0104,$0000
  52.         dc.w    $008e,$2c81
  53.         dc.w    $0090,$2cc1
  54.  
  55.         dc.w    $0100,$0200+ScrDepth*4096
  56.         dc.w    $0092,$0038
  57.         dc.w    $0094,$00d0
  58.         dc.w    $0108,ScrBPR-40
  59.         dc.w    $010a,ScrBPR-40
  60. ScrBplPtrs    ds.w    4*ScrDepth
  61. ScrColors    dc.w    $0180,$0000,$0182,$0001,$0184,$0002,$0186,$0003
  62.         dc.w    $0188,$0004,$018a,$0005,$018c,$0006,$018e,$0007
  63.         dc.w    $0190,$0008,$0192,$0009,$0194,$000a,$0196,$000b
  64.         dc.w    $0198,$000c,$019a,$000d,$019c,$000e,$019e,$000f
  65.         dc.w    $01a0,$011f,$01a2,$022f,$01a4,$033f,$01a6,$044f
  66.         dc.w    $01a8,$055f,$01aa,$066f,$01ac,$077f,$01ae,$088f
  67.         dc.w    $01b0,$099f,$01b2,$0aaf,$01b4,$0bbf,$01b6,$0ccf
  68.         dc.w    $01b8,$0ddf,$01ba,$0eef,$01bc,$0fff,$01be,$0fff
  69.  
  70.         dc.w    $ffff,$fffe
  71.  
  72. *********************************************************************
  73.  
  74. *********************************************************************
  75. *                                        *
  76. *                 -=+ ProPacker routines V1.0A +=-                  *
  77. *                                        *
  78. * Made by: Azatoth/Pha     Created: 91-07-11  Last change: 92-04-16 *
  79. *                                        *
  80. *********************************************************************
  81.  
  82. ; Note:
  83. ; This is version A with regsets from irqs !!!
  84. ; Interrupts must be enabled !!!
  85. ; Some commands are not implemented yet !!!
  86. ; There is much left to optimize !!!
  87. ; This replay can easily be made pc-independent
  88. ; For speed reasons vibrato and tremolo must 
  89. ; always be set with both parameters !!!
  90. ; Assembled with AsmOne1.07b !!!
  91.  
  92.         RSRESET
  93. pc_Command    rs.l    1            Channel structure
  94. pc_Start    rs.l    1
  95. pc_Length    rs.w    1
  96. pc_LoopStart    rs.l    1
  97. pc_RepLen    rs.w    1
  98. pc_Period    rs.w    1
  99. pc_FineTune    rs.b    1
  100. pc_Volume    rs.b    1
  101. pc_DmaBit    rs.w    1
  102. pc_PortSpeed    rs.w    1
  103. pc_WantedPeriod    rs.w    1
  104. pc_VibratoCmd    rs.b    1
  105. pc_VibratoPos    rs.b    1
  106. pc_TremoloCmd    rs.b    1
  107. pc_TremoloPos    rs.b    1
  108. pc_WaveControl    rs.b    1
  109. pc_GlissFunk    rs.b    1
  110. pc_SamOffset    rs.b    1
  111. pc_PattPos    rs.b    1
  112. pc_LoopCount    rs.b    1
  113. pc_FuncOffset    rs.b    1
  114. pc_WaveStart    rs.l    1
  115. pc_PackCnt    rs.w    1
  116. pc_FnTOffset    rs.w    1
  117. pc_SizeOff    rs.w    0
  118.  
  119.         RSRESET
  120. ps_Length    rs.w    1            Sample data structure
  121. ps_FineTune    rs.b    1
  122. ps_Volume    rs.b    1
  123. ps_Restart    rs.w    1
  124. ps_RepLen    rs.w    1
  125. ps_SamOffset    rs.l    1
  126. ps_FnTOffset    rs.w    1
  127. ps_SizeOff    rs.b    0
  128.  
  129.         RSRESET
  130. pm_SamData    rs.b    31*ps_SizeOff        Main structure
  131. pm_SongPos    rs.w    1
  132. pm_SongLength    rs.w    1
  133. pm_PattCnt    rs.w    1
  134. pm_Speed    rs.b    1
  135. pm_Counter    rs.b    1
  136. pm_PlayAdr    rs.l    1
  137. pm_RetrigInd    rs.w    1
  138. pm_PattPoses    rs.l    128
  139. pm_PattData    rs.b    0
  140.  
  141. ********************** ProPacker init routine ***********************
  142. * a0.l <= Module
  143.  
  144. pp_Init        move    pm_SongLength(a0),pp_SongLength+2
  145.         move    pm_SongPos(a0),d1
  146.         lea    pm_PattPoses(a0),a1
  147.         move.l    (a1,d1.w),d0
  148.         lea    (a0,d0.l),a1
  149.         move.l    a1,pm_PlayAdr(a0)
  150.         clr    pm_RetrigInd(a0)
  151.         move.l    $78.w,pp_OldLev6+2
  152.         move.l    #pp_DmaIrq,$78.w
  153.         move    #$2000,$dff09a
  154.         move.b    #$7f,$bfdd00
  155.         move.b    #$08,$bfde00
  156.         move.b    #$80,$bfd400
  157.         move.b    #$01,$bfd500        
  158. .Respond    btst    #0,$bfdd00
  159.         beq.s    .Respond
  160.         move.b    #$81,$bfdd00
  161.         move    #$a000,$dff09a
  162.         bset    #1,$bfe001
  163.         rts
  164.  
  165. ********************** ProPacker end routine ************************
  166.  
  167. pp_End        bclr    #1,$bfe001
  168.         move    #$2000,$dff09a
  169. pp_OldLev6    move.l    #$0000,$78.w
  170.         move    #$f,$dff096
  171.         rts
  172.  
  173. ********************* ProPacker replay routine **********************
  174. * a0.l <= Module                   Used regs: d0-d7/a1-a5
  175. * a6.l <= CustomBase
  176.  
  177. pp_Music    subq.b    #1,pm_Counter(a0)
  178.         bhi    pp_NoNotes
  179.  
  180.         move.l    pm_PlayAdr(a0),a2
  181.         move    #$8000,pp_DmaconTemp
  182.         lea    pp_Chn1Struct(pc),a1
  183.         lea    $a0(a6),a5
  184.         bsr    pp_PlayVoice
  185.         lea    pp_Chn2Struct(pc),a1
  186.         lea    $b0(a6),a5
  187.         bsr    pp_PlayVoice
  188.         lea    pp_Chn3Struct(pc),a1
  189.         lea    $c0(a6),a5
  190.         bsr    pp_PlayVoice
  191.         lea    pp_Chn4Struct(pc),a1
  192.         lea    $d0(a6),a5
  193.         bsr    pp_PlayVoice
  194.         move.l    a2,pm_PlayAdr(a0)
  195.         
  196.         move.b    #$19,$bfde00
  197.  
  198.         subq    #1,pm_PattCnt(a0)
  199.         bgt.s    pp_Return
  200.         move    #64,pm_PattCnt(a0)
  201.         clr    pp_Chn1Struct+pc_PackCnt
  202.         clr    pp_Chn2Struct+pc_PackCnt
  203.         clr    pp_Chn3Struct+pc_PackCnt
  204.         clr    pp_Chn4Struct+pc_PackCnt    
  205.         addq    #4,pm_SongPos(a0)
  206. pp_SongLength    cmp    #$0000,pm_SongPos(a0)
  207.         blo.s    pp_NotEOS
  208.         clr    pm_SongPos(a0)
  209. pp_NotEOS    lea    pm_PattPoses(a0),a1
  210.         add    pm_SongPos(a0),a1
  211.         move.l    (a1),d0
  212.         lea    (a0,d0.l),a1
  213.         move.l    a1,pm_PlayAdr(a0)
  214.  
  215. pp_Return    move.b    pm_Speed(a0),pm_Counter(a0)
  216.         rts
  217.  
  218. pp_NoNotes    lea    pp_Chn1Struct(pc),a1        Effects
  219.         lea    $a0(a6),a5
  220.         moveq    #4-1,d7
  221. pp_CmdLoop2    move.b    pc_Command+2(a1),d0
  222.         and    #$f,d0
  223.         add    d0,d0
  224.         move    pp_Every(pc,d0.w),d0
  225.         moveq    #0,d1
  226.         move.b    pc_Command+3(a1),d1
  227.         jsr    pp_Every(pc,d0.w)
  228.         add    #pc_SizeOff,a1
  229.         add    #16,a5
  230.         dbf    d7,pp_CmdLoop2
  231.  
  232.         move.b    pm_RetrigInd(a0),$bfde00
  233.         clr    pm_RetrigInd(a0)
  234.         rts
  235.  
  236. *********************************************************************
  237.  
  238. pp_Every    dc.w    pp_Arpeggio-pp_Every
  239.         dc.w    pp_PortUp-pp_Every
  240.         dc.w    pp_PortDown-pp_Every
  241.         dc.w    pp_TonePort-pp_Every
  242.         dc.w    pp_Vibrato-pp_Every
  243.         dc.w    pp_PortSlide-pp_Every
  244.         dc.w    pp_VibSlide-pp_Every
  245.         dc.w    pp_Tremolo-pp_Every
  246.         dc.w    pp_NotImp-pp_Every
  247.         dc.w    pp_NotImp-pp_Every
  248.         dc.w    pp_VolSlide-pp_Every
  249.         dc.w    pp_NotImp-pp_Every
  250.         dc.w    pp_NotImp-pp_Every
  251.         dc.w    pp_NotImp-pp_Every
  252.         dc.w    pp_ECmds1-pp_Every
  253.         dc.w    pp_NotImp-pp_Every
  254.  
  255. pp_DmaIrq    tst.b    $bfdd00
  256.         move.b    #$19,$bfde00
  257.         add.l    #pp_RegIrq-pp_DmaIrq,$78.w
  258.         move    pp_DmaconTemp(pc),$dff096
  259.         move    #$2000,$dff09c
  260.         rte
  261.  
  262. pp_RegIrq    tst.b    $bfdd00
  263.         sub.l    #pp_RegIrq-pp_DmaIrq,$78.w
  264.         move.l    pp_Chn1Struct+pc_LoopStart(pc),$dff0a0
  265.         move.l    pp_Chn2Struct+pc_LoopStart(pc),$dff0b0
  266.         move.l    pp_Chn3Struct+pc_LoopStart(pc),$dff0c0
  267.         move.l    pp_Chn4Struct+pc_LoopStart(pc),$dff0d0
  268.         move    pp_Chn1Struct+pc_RepLen(pc),$dff0a4
  269.         move    pp_Chn2Struct+pc_RepLen(pc),$dff0b4
  270.         move    pp_Chn3Struct+pc_RepLen(pc),$dff0c4
  271.         move    pp_Chn4Struct+pc_RepLen(pc),$dff0d4
  272.         move    #$2000,$dff09c
  273.         rte
  274.  
  275. pp_DmaconTemp    dc.w    0
  276. pp_Chn1Struct    dc.l    0,0,0,0,0,$00010000,0,0,0,0,0
  277. pp_Chn2Struct    dc.l    0,0,0,0,0,$00020000,0,0,0,0,0
  278. pp_Chn3Struct    dc.l    0,0,0,0,0,$00040000,0,0,0,0,0
  279. pp_Chn4Struct    dc.l    0,0,0,0,0,$00080000,0,0,0,0,0
  280.  
  281. **************************** PlayVoice ******************************
  282. * a0.l <= Module                   Used regs: d0-d6/a0-a4
  283. * a1.l <= Channel struct (AutoAdded)
  284. * a2.l <= Play data     (AutoAdded)
  285. * a5.l <= Sound regs     (AutoAdded)
  286. * a6.l <= CustomBase
  287.  
  288. pp_MulList    dc.w    00*ps_SizeOff,01*ps_SizeOff,02*ps_SizeOff,03*ps_SizeOff
  289.         dc.w    04*ps_SizeOff,05*ps_SizeOff,06*ps_SizeOff,07*ps_SizeOff
  290.         dc.w    08*ps_SizeOff,09*ps_SizeOff,10*ps_SizeOff,11*ps_SizeOff
  291.         dc.w    12*ps_SizeOff,13*ps_SizeOff,14*ps_SizeOff,15*ps_SizeOff
  292.         dc.w    16*ps_SizeOff,17*ps_SizeOff,18*ps_SizeOff,19*ps_SizeOff
  293.         dc.w    20*ps_SizeOff,21*ps_SizeOff,22*ps_SizeOff,23*ps_SizeOff
  294.         dc.w    24*ps_SizeOff,25*ps_SizeOff,26*ps_SizeOff,27*ps_SizeOff
  295.         dc.w    28*ps_SizeOff,29*ps_SizeOff,30*ps_SizeOff,31*ps_SizeOff
  296.  
  297. pp_PlayVoice    addq    #1,pc_PackCnt(a1)
  298.         blt.s    pp_NoNew
  299.         move.l    (a2)+,pc_Command(a1)
  300.         tst    (a2)
  301.         bge.s    pp_NoNew
  302.         move    (a2)+,pc_PackCnt(a1)
  303. pp_NoNew    move.b    pc_Command+0(a1),d0
  304.         beq    pp_NoSample
  305.         ext    d0
  306.         add    d0,d0
  307.         move    pp_MulList(pc,d0.w),d0
  308.         lea    pm_SamData-ps_SizeOff(a0,d0.w),a3
  309.         move.l    ps_SamOffset(a3),d1
  310.         lea    (a0,d1.l),a4
  311.         move.l    a4,pc_Start(a1)
  312.         move    ps_Length(a3),pc_Length(a1)
  313.         move    ps_FnTOffset(a3),pc_FnTOffset(a1)
  314.         move.b    ps_Volume(a3),pc_Volume(a1)
  315.         move    ps_Restart(a3),d0
  316.         beq.s    pp_NoLoop
  317.         add    d0,a4
  318.         add    d0,a4
  319.         add    ps_RepLen(a3),d0
  320.         move    d0,pc_Length(a1)
  321. pp_NoLoop    move.l    a4,pc_LoopStart(a1)
  322.         move    ps_RepLen(a3),pc_RepLen(a1)
  323.         move.b    pc_Volume(a1),9(a5)
  324.  
  325. pp_NoSample    move.b    pc_Command+1(a1),d2
  326.         beq.s    pp_NoNote
  327.  
  328.         ext    d2
  329.         add    pc_FnTOffset(a1),d2
  330.  
  331.         move.b    pc_Command+2(a1),d0
  332.         and.b    #$f,d0
  333.         move    pp_PeriodTable-2(pc,d2.w),d2
  334.         subq.b    #3,d0
  335.         beq    pp_SetPort
  336.         subq.b    #2,d0
  337.         beq    pp_SetPort
  338.         move    d2,pc_Period(a1)
  339.         subq.b    #4,d0
  340.         bne.s    pp_NoSamOffset
  341.         bsr    pp_SamOffset
  342. pp_NoSamOffset    move    pc_Command+2(a1),d0
  343.         and    #$0ff0,d0
  344.         cmp    #$0ed0,d0
  345.         beq.s    pp_GoHome
  346.  
  347.         move    pc_DmaBit(a1),d0
  348.         or    d0,pp_DmaconTemp
  349.         move    d0,$96(a6)
  350.         
  351.         move.l    pc_Start(a1),(a5)
  352.         move    pc_Length(a1),4(a5)
  353. pp_NoNote    move    pc_Period(a1),6(a5)
  354.  
  355.         move.b    pc_Command+2(a1),d0
  356.         and    #$f,d0
  357.         add    d0,d0
  358.         move    pp_Note(pc,d0.w),d0
  359.         moveq    #0,d1
  360.         move.b    pc_Command+3(a1),d1
  361.         jmp    pp_Note(pc,d0.w)
  362.  
  363. pp_Note        dc.w    pp_NotImp-pp_Note
  364.         dc.w    pp_NotImp-pp_Note
  365.         dc.w    pp_NotImp-pp_Note
  366.         dc.w    pp_TonePort-pp_Note
  367.         dc.w    pp_NotImp-pp_Note
  368.         dc.w    pp_TonePort-pp_Note
  369.         dc.w    pp_VibSlide-pp_Note
  370.         dc.w    pp_NotImp-pp_Note
  371.         dc.w    pp_NotImp-pp_Note
  372.         dc.w    pp_NotImp-pp_Note
  373.         dc.w    pp_NotImp-pp_Note
  374.         dc.w    pp_PosJump-pp_Note
  375.         dc.w    pp_SetVolume-pp_Note
  376.         dc.w    pp_PattBrk-pp_Note
  377.         dc.w    pp_ECmds2-pp_Note
  378.         dc.w    pp_SetSpeed-pp_Note
  379.  
  380. pp_GoHome    rts
  381.  
  382.         ;    C   C#  D   D#  E   F   F#  G   G#  A   A#  H      Oct FnT
  383.         
  384. pp_PeriodTable    dc.w    856,808,762,720,678,640,604,570,538,508,480,453   1   1
  385.         dc.w    428,404,381,360,339,320,302,285,269,254,240,226   2
  386.         dc.w    214,202,190,180,170,160,151,143,135,127,120,113   3
  387.         dc.w    850,802,757,715,674,637,601,567,535,505,477,450      1   2
  388.         dc.w    425,401,379,357,337,318,300,284,268,253,239,225   2
  389.         dc.w    213,201,189,179,169,159,150,142,134,126,119,113   3
  390.         dc.w    844,796,752,709,670,632,597,563,532,502,474,447   o   3
  391.         dc.w    422,398,376,355,335,316,298,282,266,251,237,224   s
  392.         dc.w    211,199,188,177,167,158,149,141,133,125,118,112   v
  393.         dc.w    838,791,746,704,665,628,592,559,528,498,470,444       4
  394.         dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  395.         dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  396.         dc.w    832,785,741,699,660,623,588,555,524,495,467,441       5
  397.         dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  398.         dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  399.         dc.w    826,779,736,694,655,619,584,551,520,491,463,437       6
  400.         dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  401.         dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  402.         dc.w    820,774,730,689,651,614,580,547,516,487,460,434       7
  403.         dc.w    410,387,365,345,325,307,290,274,258,244,230,217       
  404.         dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  405.         dc.w    814,768,725,684,646,610,575,543,513,484,457,431      -8
  406.         dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  407.         dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  408.         dc.w    907,856,808,762,720,678,640,604,570,538,508,480      -9
  409.         dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  410.         dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  411.         dc.w    900,850,802,757,715,675,636,601,567,535,505,477     -10
  412.         dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  413.         dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  414.         dc.w    894,844,796,752,709,670,632,597,563,532,502,474     -11
  415.         dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  416.         dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  417.         dc.w    887,838,791,746,704,665,628,592,559,528,498,470     -12
  418.         dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  419.         dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  420.         dc.w    881,832,785,741,699,660,623,588,555,524,494,467     -13
  421.         dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  422.         dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  423.         dc.w    875,826,779,736,694,655,619,584,551,520,491,463     -14
  424.         dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  425.         dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  426.         dc.w    868,820,774,730,689,651,614,580,547,516,487,460     -15
  427.         dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  428.         dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  429.         dc.w    862,814,768,725,684,646,610,575,543,513,484,457     -16
  430.         dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  431.         dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  432.  
  433. ****************************** Commands *****************************
  434. * d1.w <= Command byte
  435. * a0.l <= Module                   Used regs: d0-d6/a3-a4
  436. * a1.l <= Channel struct
  437. * a5.l <= Sound regs
  438. * a6.l <= CustomBase
  439. * sr.? <= tst.b d1
  440.  
  441. pp_Arpeggio    beq    pp_NoArp
  442.         moveq    #0,d0
  443.         move.b    pm_Speed(a0),d0
  444.         subq.b    #1,d0
  445.         sub.b    pm_Counter(a0),d0
  446.         divs    #3,d0
  447.         swap    d0
  448.         tst    d0
  449.         beq.s    pp_Arpeggio2
  450.         cmp    #2,d0
  451.         beq.s    pp_Arpeggio1
  452.         moveq    #0,d0
  453.         move.b    d1,d0
  454.         lsr.b    #4,d0
  455.         bra.s    pp_Arpeggio3
  456. pp_Arpeggio1    moveq    #0,d0
  457.         move.b    d1,d0
  458.         and.b    #$f,d0
  459.         bra.s    pp_Arpeggio3
  460. pp_Arpeggio2    move    pc_Period(a1),d2
  461.         bra.s    pp_Arpeggio4
  462. pp_Arpeggio3    add    d0,d0
  463.         moveq    #0,d1
  464.         move.b    pc_FineTune(a1),d1
  465.         mulu    #2*36,d1
  466.         lea    pp_PeriodTable(pc),a4
  467.         add.l    d1,a4
  468.         moveq    #0,d1
  469.         move    pc_Period(a1),d1
  470.         moveq    #36-1,d6
  471. pp_arploop    move    (a4,d0.w),d2
  472.         cmp    (a4),d1
  473.         bhs.s    pp_Arpeggio4
  474.         addq    #2,a4
  475.         dbf    d6,pp_arploop
  476. pp_NoArp    rts
  477. pp_Arpeggio4    move    d2,6(a5)
  478.         rts
  479.  
  480. pp_PortUp    sub    d1,pc_Period(a1)
  481.         cmp    #113,pc_Period(a1)
  482.         bpl.s    .NotMin
  483.         move    #113,pc_Period(a1)
  484. .NotMin        move    pc_Period(a1),6(a5)
  485.         rts
  486.  
  487. pp_PortDown    add    d1,pc_Period(a1)
  488.         cmp    #856,pc_Period(a1)
  489.         bmi.s    .NotMax
  490.         move    #856,pc_Period(a1)
  491. .NotMax        move    pc_Period(a1),6(a5)
  492.         rts
  493.  
  494. pp_SetPort    move    d2,pc_WantedPeriod(a1)
  495.         rts
  496.  
  497. pp_PortSlide    bsr    pp_VolSlide
  498.         tst.b    d1
  499. pp_TonePort    beq.s    .PortNoChange
  500.         move    d1,pc_PortSpeed(a1)
  501. .PortNoChange    move    pc_PortSpeed(a1),d0
  502.         move    pc_WantedPeriod(a1),d2
  503.         sub    pc_Period(a1),d2
  504.         beq.s    .Return
  505.         bgt.s    .Pos        
  506.         neg    d2
  507.         sub    d0,pc_Period(a1)
  508.         bra.s    .Continue
  509. .Pos        add    d0,pc_Period(a1)
  510. .Continue    cmp    d0,d2
  511.         bge.s    .SlideMore
  512.         move    pc_WantedPeriod(a1),pc_Period(a1)
  513. .SlideMore    move    pc_Period(a1),6(a5)
  514. .Return        rts
  515.  
  516. pp_Vibrato    beq.s    pp_NoParas1
  517.         move.b    d1,pc_VibratoCmd(a1)
  518. pp_NoParas1    move.b    pc_VibratoPos(a1),d0
  519.         lsr    #2,d0
  520.         and    #$1f,d0
  521.         moveq    #0,d2
  522.         move.b    pp_VibratoTable(pc,d0.w),d2
  523.         move.b    pc_VibratoCmd(a1),d3
  524.         move    d3,d4
  525.         and    #$f,d3
  526.         mulu    d3,d2
  527.         lsr    #7,d2
  528.         tst.b    pc_VibratoPos(a1)
  529.         bpl.s    pp_NoNeg
  530.         neg    d2
  531. pp_NoNeg    add    pc_Period(a1),d2
  532.         move    d2,6(a5)
  533.         lsr.b    #2,d4
  534.         and    #$3c,d4
  535.         add.b    d4,pc_VibratoPos(a1)
  536.         rts
  537.  
  538. pp_Tremolo    beq.s    pp_NoParas2
  539.         move.b    d1,pc_TremoloCmd(a1)
  540. pp_NoParas2    move.b    pc_TremoloPos(a1),d0
  541.         lsr    #2,d0
  542.         and    #$1f,d0
  543.         moveq    #0,d2
  544.         move.b    pp_VibratoTable(pc,d0.w),d2
  545.         move.b    pc_TremoloCmd(a1),d3
  546.         move    d3,d4
  547.         and    #$f,d3
  548.         mulu    d3,d2
  549.         lsr    #7,d2
  550.         tst.b    pc_TremoloPos(a1)
  551.         bmi.s    pp_TreSub
  552.         neg    d2
  553. pp_TreSub    neg    d2
  554.          add.b    pc_Volume(a1),d2
  555.         bge.s    pp_TreOk1
  556.         clr    d2
  557. pp_TreOk1    cmp.b    #$40,d2
  558.         ble.s    pp_TreOk2
  559.         moveq    #$40,d2
  560. pp_TreOk2    move    d2,8(a5)
  561.         lsr.b    #2,d4
  562.         and    #$3c,d4
  563.         add.b    d4,pc_TremoloPos(a1)
  564.         rts
  565.  
  566. pp_VibratoTable    dc.b     0,24,49,74,97,120,141,161,180,197,212,224,235,244,250
  567.         dc.b    253,255,253,250,244,235,224,212,197,180,161,141,120,97
  568.         dc.b    74,49,24
  569.  
  570. pp_VibSlide    bsr    pp_NoParas1
  571. pp_VolSlide    move.b    d1,d0
  572.         lsr.b    #4,d1
  573.         beq.s    pp_VolSlideDown
  574. pp_VolSlideUp    add.b    d1,pc_Volume(a1)
  575.         cmp.b    #$40,pc_Volume(a1)
  576.         bmi.s    pp_vsdskip
  577.         move.b    #$40,pc_Volume(a1)
  578.         bra.s    pp_vsdskip
  579. pp_VolSlideDown    and.b    #$f,d0
  580.         sub.b    d0,pc_Volume(a1)
  581.         bpl.s    pp_vsdskip
  582.         clr.b    pc_Volume(a1)
  583. pp_vsdskip    move.b    pc_Volume(a1),8(a5)
  584.         rts
  585.  
  586. pp_SetVolume    move.b    d1,pc_Volume(a1)
  587.         move    d1,8(a5)
  588.         rts
  589.  
  590. pp_PosJump    add    d1,d1
  591.         add    d1,d1
  592.         move    d1,pm_SongPos(a0)
  593. pp_PattBrk    clr    pm_PattCnt(a0)
  594.         rts
  595.  
  596. pp_SetSpeed    move.b    d1,pm_Speed(a0)
  597.         rts
  598.  
  599. pp_SamOffset    move.b    pc_Command+3(a1),d1
  600.         beq    pp_NoNew1
  601.         move.b    d1,pc_SamOffset(a1)
  602. pp_NoNew1    moveq    #0,d1
  603.         move.b    pc_SamOffset(a1),d1
  604.         lsl    #7,d1
  605.         sub    d1,pc_Length(a1)
  606.         add    d1,d1
  607.         add.l    d1,pc_Start(a1)
  608.         rts
  609.  
  610. pp_ECmds1    move    d1,d0
  611.         lsr    #4,d0
  612.         add    d0,d0
  613.         move    pp_ECmdList1(pc,d0.w),d0
  614.         and    #$f,d1
  615.         jmp    pp_ECmdList1(pc,d0.w)
  616.  
  617. pp_ECmdList1    dc.w    pp_Filter-pp_ECmdList1
  618.         dc.w    pp_NotImp-pp_ECmdList1
  619.         dc.w    pp_NotImp-pp_ECmdList1
  620.         dc.w    pp_NotImp-pp_ECmdList1
  621.         dc.w    pp_NotImp-pp_ECmdList1
  622.         dc.w    pp_SetFnTune-pp_ECmdList1
  623.         dc.w    pp_NotImp-pp_ECmdList1
  624.         dc.w    pp_NotImp-pp_ECmdList1
  625.         dc.w    pp_NotImp-pp_ECmdList1
  626.         dc.w    pp_RetrigNote-pp_ECmdList1
  627.         dc.w    pp_NotImp-pp_ECmdList1
  628.         dc.w    pp_NotImp-pp_ECmdList1
  629.         dc.w    pp_NoteCut-pp_ECmdList1
  630.         dc.w    pp_NoteDelay-pp_ECmdList1
  631.         dc.w    pp_NotImp-pp_ECmdList1
  632.         dc.w    pp_NotImp-pp_ECmdList1
  633.  
  634. pp_ECmds2    move    d1,d0
  635.         lsr    #4,d0
  636.         add    d0,d0
  637.         move    pp_ECmdList2(pc,d0.w),d0
  638.         and    #$f,d1
  639.         jmp    pp_ECmdList2(pc,d0.w)
  640.  
  641. pp_ECmdList2    dc.w    pp_Filter-pp_ECmdList2
  642.         dc.w    pp_PortUp-pp_ECmdList2
  643.         dc.w    pp_PortDown-pp_ECmdList2
  644.         dc.w    pp_NotImp-pp_ECmdList2
  645.         dc.w    pp_NotImp-pp_ECmdList2
  646.         dc.w    pp_SetFnTune-pp_ECmdList2
  647.         dc.w    pp_NotImp-pp_ECmdList2
  648.         dc.w    pp_NotImp-pp_ECmdList2
  649.         dc.w    pp_NotImp-pp_ECmdList2
  650.         dc.w    pp_RetrigNote-pp_ECmdList2
  651.         dc.w    pp_VolSlideUp-pp_ECmdList2
  652.         dc.w    pp_VolFineDown-pp_ECmdList2
  653.         dc.w    pp_NoteCut-pp_ECmdList2
  654.         dc.w    pp_NoteDelay-pp_ECmdList2
  655.         dc.w    pp_NotImp-pp_ECmdList2
  656.         dc.w    pp_NotImp-pp_ECmdList2
  657.  
  658. pp_Filter    add.b    d1,d1
  659.         and.b    #$fd,$bfe001
  660.         or.b    d1,$bfe001
  661.         rts    
  662.  
  663. pp_SetFnTune    move    d1,d0
  664.         lsl    #6,d0
  665.         lsl    #3,d1
  666.         add    d0,d1
  667.         move    d1,pc_FnTOffset(a1)
  668.         rts
  669.  
  670. pp_VolFineDown    move    d1,d0
  671.         bra    pp_VolSlideDown
  672.  
  673. pp_NoteCut    move.b    pm_Speed(a0),d0
  674.         sub.b    pm_Counter(a0),d0
  675.         cmp.b    d0,d1
  676.         bne.s    pp_NoCut
  677.         clr.b    pc_Volume(a1)
  678.         move    #0,8(a5)
  679. pp_NoCut    rts
  680.  
  681. pp_RetrigNote    beq.s    pp_GetBack
  682.         moveq    #0,d0
  683.         move.b    pm_Speed(a0),d0
  684.         sub.b    pm_Counter(a0),d0
  685.         divu    d1,d0
  686.         swap    d0
  687.         tst    d0
  688.         bne.s    pp_GetBack
  689.         move    pc_DmaBit(a1),d1
  690.         move    d1,$96(a6)
  691.         or    d1,pp_DmaconTemp
  692.         move.l    pc_Start(a1),(a5)
  693.         move    pc_Length(a1),4(a5)
  694.         move    pc_Period(a1),6(a5)
  695.         move.b    #$19,pm_RetrigInd(a0)
  696. pp_GetBack    rts
  697.  
  698. pp_NoteDelay    move.b    pm_Speed(a0),d0
  699.         sub.b    pm_Counter(a0),d0
  700.         cmp.b    d0,d1
  701.         bne    pp_NoDelay
  702.         move    pc_DmaBit(a1),d1
  703.         move    d1,$96(a6)
  704.         or    d1,pp_DmaconTemp
  705.         move.l    pc_Start(a1),(a5)
  706.         move    pc_Length(a1),4(a5)
  707.         move    pc_Period(a1),6(a5)
  708.         move.b    #$19,pm_RetrigInd(a0)
  709. pp_NoDelay    rts
  710.  
  711. pp_NotImp    rts
  712.  
  713. pp_Data        Place propacked module here
  714.  
  715. ******************* End of ProPacker routines ***********************
  716. *********************************************************************
  717.  
  718. ScrAdr        dcb.b    ScrBytes
  719.